# -*- coding: utf-8 -*-

import os
import pytest
import requests
import json
from test_case.test_path_config import TEST_PATHS
from tools import logger, BASE_DIR
import time
import datetime
import shutil


def start_autotest():
    """
    启动自动化测试流程。
    1. 清除日志。
    2. 根据当前时间创建日志文件。
    3. 执行UI测试用例，并将结果输出到指定目录。
    4. 生成 Allure 报告并发送钉钉通知。
    """
    # 清理旧的日志和报告
    now = datetime.datetime.now()
    one_day_ago = now - datetime.timedelta(days=0)

    for dir_type in ['data', 'html', 'video']:
        target_dir = os.path.join(BASE_DIR, 'report', dir_type)
        if os.path.exists(target_dir):
            for item in os.listdir(target_dir):
                item_path = os.path.join(target_dir, item)
                if datetime.datetime.fromtimestamp(os.path.getctime(item_path)) < one_day_ago:
                    if os.path.isdir(item_path):
                        shutil.rmtree(item_path)
                    else:
                        os.remove(item_path)

    # 初始化日志
    logger.remove()
    create_date = time.strftime('%Y_%m_%d', time.localtime(time.time()))
    logger.add(f'log/{create_date}.log', enqueue=True, encoding='utf-8', retention=30)
    logger.info("""
     _   _   _ _____ ___    _____ _____ ____ _____ 
    / \ | | | |_   _/ _ \  |_   _| ____/ ___|_   _|
   / _ \| | | | | || | | |   | | |  _| \___ \ | |  
  / ___ \ |_| | | || |_| |   | | | |___ ___) || |  
 /_/   \_\___/  |_| \___/    |_| |_____|____/ |_|  
"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'./o--000'"`-0-0-'"
      Starting      ...     ...     ...
    """)

    # 定义 Allure 报告相关目录路径
    now_time = time.strftime('%Y%m%d_%H%M%S', time.localtime(time.time()))
    allure_data_dir = os.path.join(BASE_DIR, 'report', 'data', now_time)
    allure_report_dir = os.path.join(BASE_DIR, 'report', 'html', now_time)
    test_results = os.path.join(BASE_DIR, 'report', 'video', now_time)
    # 执行 pytest 测试
    # pytest.main(args=[*TEST_PATHS, f'--output={test_results}', f'--alluredir={allure_data_dir}'])
    # 按顺序逐个执行测试目录

    # 上线改动 pytest.ini文件 去掉 --headed  和打开 生成 Allure 报告
    for test_path in TEST_PATHS:
        pytest.main([
            test_path,
            f'--output={test_results}',
            f'--alluredir={allure_data_dir}'  # 共享同一个报告目录
        ])

        # # 生成 Allure 报告
        # pytest.main([
        #     test_path,
        #     f'--alluredir=./allure-results ',
        #     # f'--clean-alluredir',
        # ])
    # 生成 Allure 报告
    try:
        os.system(f'allure generate {allure_data_dir} -o {allure_report_dir} -c')
    except Exception as e:
        logger.error(f"生成 Allure 报告时发生错误: {str(e)}")
        return

    # 下面两行代码被注释，用于生成和打开Allure报告，可根据需要取消注释
    # os.system(f'{allure_path} generate {allure_data_dir} -o  {allure_report_dir} -c')
    # os.system(f'allure generate {allure_data_dir} -o  {allure_report_dir} -c')
    # os.system(f'{allure_path} open {allure_report_dir}')


if __name__ == '__main__':
    start_autotest()
